Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bumped specificity for layout styles in non-iframed editor #64076

Merged
merged 6 commits into from
Aug 13, 2024

Conversation

talldan
Copy link
Contributor

@talldan talldan commented Jul 30, 2024

Core backport PR - WordPress/wordpress-develop#7145
Core backport trac ticket - https://core.trac.wordpress.org/ticket/61829

What?

Fixes the issue mentioned in #53468 (comment) to restore theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

How?

In trunk the code generates a selector like .is-layout-flow > * (specificity 0,1,0) which is fine normally. When in a non-iframed editor, the transformStyles function prefixes selectors with .editor-styles-wrapper to scope them to the editor canvas, so it becomes .editor-styles-wrapper .is-layout-flow > * (specificity 0,2,0), a bump in specificity that causes the precedence of styles to change.

In this PR I've changed the selector to :root :where(.is-layout-flow) > * (still specificity 0,1,0). transformStyles handles 'root' selectors a little differently, it'll instead replace the :root part so it becomes .editor-styles-wrapper where(.is-layout-flow) > * (keeping the specificity at 0,1,0).

The other layout selector that this affects is the :first-child :last-child selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like :root :where(.is-layout-flow) > :first-child.

Here's a list of selectors that will be updated (according to our php tests)
-.is-layout-flow  > :first-child {
+:root :where(.is-layout-flow) > :first-child {

-.is-layout-flow  > :last-child {
+:root :where(.is-layout-flow) > :last-child {

-.is-layout-flow  > * {
+:root :where(.is-layout-flow) > * {

-.is-layout-constrained  > :first-child {
+:root :where(.is-layout-constrained) > :first-child {

-.is-layout-constrained  > :last-child {
+:root :where(.is-layout-constrained) > :last-child {

-.is-layout-constrained  > * {
+:root :where(.is-layout-constrained) > * {

-.is-layout-flex  {
+:root :where(.is-layout-flex) {

-.is-layout-grid  {
+:root :where(.is-layout-grid) {

-.wp-block-social-links-is-layout-flow  > :first-child {
+:root :where(.wp-block-social-links-is-layout-flow) > :first-child {

-.wp-block-social-links-is-layout-flow  > :last-child {
+:root :where(.wp-block-social-links-is-layout-flow) > :last-child {

-.wp-block-social-links-is-layout-flow  > * {
+:root :where(.wp-block-social-links-is-layout-flow) > * {

-.wp-block-social-links-is-layout-constrained  > :first-child {
+:root :where(.wp-block-social-links-is-layout-constrained) > :first-child {

-.wp-block-social-links-is-layout-constrained  > :last-child {
+:root :where(.wp-block-social-links-is-layout-constrained) > :last-child {

-.wp-block-social-links-is-layout-constrained  > * {
+:root :where(.wp-block-social-links-is-layout-constrained) > * {

-.wp-block-social-links-is-layout-flex  {
+:root :where(.wp-block-social-links-is-layout-flex) {

-.wp-block-social-links-is-layout-grid  {
+:root :where(.wp-block-social-links-is-layout-grid) {

-.wp-block-buttons-is-layout-flow  > :first-child {
+:root :where(.wp-block-buttons-is-layout-flow) > :first-child {

-.wp-block-buttons-is-layout-flow  > :last-child {
+:root :where(.wp-block-buttons-is-layout-flow) > :last-child {

-.wp-block-buttons-is-layout-flow  > * {
+:root :where(.wp-block-buttons-is-layout-flow) > * {

-.wp-block-buttons-is-layout-constrained  > :first-child {
+:root :where(.wp-block-buttons-is-layout-constrained) > :first-child {

-.wp-block-buttons-is-layout-constrained  > :last-child {
+:root :where(.wp-block-buttons-is-layout-constrained) > :last-child {

-.wp-block-buttons-is-layout-constrained  > * {
+:root :where(.wp-block-buttons-is-layout-constrained) > * {

-.wp-block-buttons-is-layout-flex  {
+:root :where(.wp-block-buttons-is-layout-flex) {

-.wp-block-buttons-is-layout-grid  {
+:root :where(.wp-block-buttons-is-layout-grid) {

Testing Instructions

  1. Add some very obvious margin rules to your theme.json like this for paragraphs (under styles.blocks):
"core/paragraph": {
	"spacing": {
		"margin": {
			"top": "4rem",
			"bottom": "4rem"
		}
	}
},
  1. Create a new post. Ensure you don't have custom fields active.
  2. Insert 3 paragraphs with text, check that the margin looks right. The first paragraph should have no top margin, the last no bottom margin, but in all other cases there should be 4rem top/bottom margin.
  3. Activate Custom Fields in the editor preferences to 'un-iframe' the editor
  4. Check that the styles are the same without the iframe

Also worth checking out trunk and comparing the styles. You should see that in trunk the iframed editor looks correct, but when you activate custom fields the non-iframed editor styles are broken.

Screenshots or screencast

Before

Screenshot 2024-07-31 at 4 33 10 PM

After

Screenshot 2024-07-31 at 4 33 30 PM

@talldan talldan added [Type] Bug An existing feature does not function as intended Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Jul 30, 2024
@talldan talldan self-assigned this Jul 30, 2024
@talldan talldan added the Needs PHP backport Needs PHP backport to Core label Jul 31, 2024
@talldan talldan force-pushed the fix/specificity-iframed-editor branch from a7c4d98 to 2e67d28 Compare July 31, 2024 08:55
@talldan talldan marked this pull request as ready for review July 31, 2024 08:56
Copy link

github-actions bot commented Jul 31, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@talldan talldan force-pushed the fix/specificity-iframed-editor branch from 2e67d28 to 73962fe Compare August 1, 2024 03:16
@talldan talldan changed the title Fix too specific layout styles in non-iframed editor Fix bumped specific for layout styles in non-iframed editor Aug 1, 2024
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for digging into this one!

I'm curious as to why we need to change the PHP output of the layout support instead of updating transformStyles to resolve it and / or handle layout styles differently via a utility function. Since this will affect the output on the site frontend it sounds like a broader change than only looking at styling in the non-iframed editor?

My main concern whenever looking at the layout styles we're outputting is that it can be tricky to predict how it might affect themes out in the wild, and tellthemachines isn't currently around, who I usually ping for insights into these kinds of changes 😄

@talldan
Copy link
Contributor Author

talldan commented Aug 1, 2024

I had a look at something like that originally as part of another PR I'm working on (#63972), but I have concerns over how reliable it'd be because it'd mean quite a bit of manipulation of the selector. The :first-child, :last-child selectors would need to be split and reassembled, it's not just a simple wrapping.

transformStyles processes so much CSS (including third party stylesheets), so I think it might be even harder to predict the results.

This also changes the selectors back to be closer to how they were prior to #61638 (where the problem was introduced), the change to the selectors before that was in #60228 if you want to have a look at the history. (I should have left some of that info in the PR description)

@andrewserong
Copy link
Contributor

andrewserong commented Aug 1, 2024

Thanks for the extra context! In that case, should we also be updating the JS version getLayoutStyles so that they use the same rules for consistency? Around here:

I mightn't get a chance to test this in much detail this week, but happy to give it a proper run through next week if it's still open. I'll just add @ellatrix as a reviewer too, given the history with #61638.

So far it's testing well for me in the iframed and non iframed editors, according to the testing instructions (and other blocks like Heading, etc have their default layout rules applied as expected):

Iframed non-iframed
image image

@talldan talldan changed the title Fix bumped specific for layout styles in non-iframed editor Fix bumped specificity for layout styles in non-iframed editor Aug 1, 2024
@andrewserong
Copy link
Contributor

I think I might have found a difference that this PR creates compared to trunk:

On trunk if I give the Group block a block spacing value in global styles as well as a paragraph block vertical margin styles, then the paragraph block's margin styles will win out:

image

With this PR, it looks like the Group block's block spacing value wins out:

image

Are you able to replicate that? The steps I used:

  1. In global styles, give the Paragraph block some vertical margins
  2. In global styles, give the Group block a block spacing value
  3. Add a Group block to a template with several child paragraph blocks
  4. Look at the spacing between the blocks in trunk vs this PR

@talldan
Copy link
Contributor Author

talldan commented Aug 1, 2024

Thanks for the extra context! In that case, should we also be updating the JS version getLayoutStyles so that they use the same rules for consistency? Around here:

It's interesting you mention those lines, as it looks like those were wrapped in :where since #42665 (back in 2022), but #61638 changed them (maybe it shouldn't have?).

edit: I was incorrectly looking at the fallback styles in the above comment. I've pushed a commit to update the JS version.

@talldan
Copy link
Contributor Author

talldan commented Aug 1, 2024

Are you able to replicate that?

I'm not seeing that, and I'm not sure why it would happen as the styles in your screenshot have the same specificity as before and I haven't changed anything else.

There is something else that seems wrong (in both trunk and this PR).

If I follow your steps I see different results depending on whether I have this snippet in my theme's theme.json or not:

"core/paragraph": {
	"spacing": {
		"margin": {
			"top": "4rem",
			"bottom": "4rem"
		}
	}
},

I wouldn't expect that as the styles are being overridden by global styles.

Possibly this is what you were seeing too? Maybe you accidentally removed the snippet when changing branches. It might be that the styles are being added in a different order depending on whether theme.json defines some block margin. 🤔

Copy link

github-actions bot commented Aug 1, 2024

Size Change: +4 B (0%)

Total Size: 1.77 MB

Filename Size Change
build/block-editor/index.min.js 255 kB +4 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 951 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.31 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.29 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/content-rtl.css 4.58 kB
build/block-editor/content.css 4.58 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/style-rtl.css 16.3 kB
build/block-editor/style.css 16.3 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 310 B
build/block-library/blocks/button/editor.css 310 B
build/block-library/blocks/button/style-rtl.css 538 B
build/block-library/blocks/button/style.css 538 B
build/block-library/blocks/buttons/editor-rtl.css 336 B
build/block-library/blocks/buttons/editor.css 336 B
build/block-library/blocks/buttons/style-rtl.css 328 B
build/block-library/blocks/buttons/style.css 328 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 B
build/block-library/blocks/categories/editor-rtl.css 132 B
build/block-library/blocks/categories/editor.css 131 B
build/block-library/blocks/categories/style-rtl.css 152 B
build/block-library/blocks/categories/style.css 152 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 122 B
build/block-library/blocks/code/theme.css 122 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-content/style-rtl.css 90 B
build/block-library/blocks/comment-content/style.css 90 B
build/block-library/blocks/comment-template/style-rtl.css 200 B
build/block-library/blocks/comment-template/style.css 199 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 221 B
build/block-library/blocks/comments-pagination/editor.css 211 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 668 B
build/block-library/blocks/cover/editor.css 669 B
build/block-library/blocks/cover/style-rtl.css 1.62 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 314 B
build/block-library/blocks/embed/editor.css 314 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 342 B
build/block-library/blocks/form-input/style.css 342 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 955 B
build/block-library/blocks/gallery/editor.css 958 B
build/block-library/blocks/gallery/style-rtl.css 1.71 kB
build/block-library/blocks/gallery/style.css 1.71 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 344 B
build/block-library/blocks/group/editor.css 344 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 894 B
build/block-library/blocks/image/editor.css 892 B
build/block-library/blocks/image/style-rtl.css 1.59 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 1.65 kB
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 186 B
build/block-library/blocks/latest-posts/editor.css 183 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 B
build/block-library/blocks/list/style-rtl.css 107 B
build/block-library/blocks/list/style.css 107 B
build/block-library/blocks/loginout/style-rtl.css 61 B
build/block-library/blocks/loginout/style.css 61 B
build/block-library/blocks/media-text/editor-rtl.css 304 B
build/block-library/blocks/media-text/editor.css 303 B
build/block-library/blocks/media-text/style-rtl.css 516 B
build/block-library/blocks/media-text/style.css 515 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 663 B
build/block-library/blocks/navigation-link/editor.css 664 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.18 kB
build/block-library/blocks/navigation/editor.css 2.19 kB
build/block-library/blocks/navigation/style-rtl.css 2.25 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/navigation/view.min.js 1.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 527 B
build/block-library/blocks/post-comments-form/style.css 528 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-content/style-rtl.css 79 B
build/block-library/blocks/post-content/style.css 79 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 155 B
build/block-library/blocks/post-excerpt/style.css 155 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 341 B
build/block-library/blocks/post-featured-image/style.css 341 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 399 B
build/block-library/blocks/post-template/style.css 398 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 70 B
build/block-library/blocks/post-time-to-read/style.css 70 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 220 B
build/block-library/blocks/query-pagination/editor.css 208 B
build/block-library/blocks/query-pagination/style-rtl.css 287 B
build/block-library/blocks/query-pagination/style.css 283 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 452 B
build/block-library/blocks/query/editor.css 451 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 221 B
build/block-library/blocks/quote/theme.css 225 B
build/block-library/blocks/read-more/style-rtl.css 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 193 B
build/block-library/blocks/search/editor.css 193 B
build/block-library/blocks/search/style-rtl.css 672 B
build/block-library/blocks/search/style.css 671 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-tagline/style-rtl.css 65 B
build/block-library/blocks/site-tagline/style.css 65 B
build/block-library/blocks/site-title/editor-rtl.css 123 B
build/block-library/blocks/site-title/editor.css 123 B
build/block-library/blocks/site-title/style-rtl.css 90 B
build/block-library/blocks/site-title/style.css 90 B
build/block-library/blocks/social-link/editor-rtl.css 338 B
build/block-library/blocks/social-link/editor.css 338 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.5 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table-of-contents/style-rtl.css 83 B
build/block-library/blocks/table-of-contents/style.css 83 B
build/block-library/blocks/table/editor-rtl.css 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/editor-rtl.css 63 B
build/block-library/blocks/tag-cloud/editor.css 63 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 126 B
build/block-library/blocks/term-description/style.css 126 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 541 B
build/block-library/blocks/video/editor.css 542 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.9 kB
build/block-library/editor.css 11.9 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 217 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 702 B
build/block-library/theme.css 707 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.4 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 224 kB
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.81 kB
build/core-data/index.min.js 73.1 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.98 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 12.6 kB
build/edit-post/style-rtl.css 2.31 kB
build/edit-post/style.css 2.31 kB
build/edit-site/index.min.js 216 kB
build/edit-site/posts-rtl.css 7.02 kB
build/edit-site/posts.css 7.03 kB
build/edit-site/style-rtl.css 12.4 kB
build/edit-site/style.css 12.4 kB
build/edit-widgets/index.min.js 17.7 kB
build/edit-widgets/style-rtl.css 4.2 kB
build/edit-widgets/style.css 4.2 kB
build/editor/index.min.js 100 kB
build/editor/style-rtl.css 9.36 kB
build/editor/style.css 9.35 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.09 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.54 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.5 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.78 kB
build/interactivity/index.min.js 13.4 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 742 B
build/interactivity/router.min.js 2.8 kB
build/interactivity/search.min.js 615 B
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.16 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.3 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.59 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.36 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 554 B
build/preferences/style.css 554 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 1.01 kB
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.54 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.03 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.85 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@andrewserong
Copy link
Contributor

I'm not seeing that, and I'm not sure why it would happen as the styles in your screenshot have the same specificity as before and I haven't changed anything else.

Thanks for trying to reproduce! I think this was my own user error when running through this quickly yesterday. So far it's all looking consistent to me while testing locally, but I'll run it through a few more themes to be sure 👍

@andrewserong
Copy link
Contributor

Alrighty, so this appears to be testing well for me so far, but it'd be good to get another set of 👀 to confirm.

One question, it looks like this PR is only updating the specificity for the spacing styles rules. Do they also need to be updated for the base styles, too? I'm imagining not?

image

Around this line and beyond:

// Output base styles.

I couldn't see any issues caused by the existing base layout rules between the iframed and non-iframed editor (I think the rules were last updated in #60228), so it sounds like they could probably remain as-is for now? From my perspective it's good if we can do the smallest set of changes required to fix the bug at hand.

In testing so far with this PR:

  • ✅ Block-level margin styles in global styles overrides base spacing styles
  • ✅ Block-level margin styles in global styles overrides block level spacing in global styles (e.g. Group block set to 0 block spacing will be overridden by paragraphs within the Group if paragraphs have margin set)
  • ✅ Block instance level block spacing overrides global styles margin rules
  • ✅ Block instance level margins override block instance level block spacing
  • ✅ Block spacing for buttons, social icons, row, stack, and grid all appear to be working
  • ✅ All the above are testing well in the iframed and non-iframed post editor, and in the site editor and site frontend for me

So, all looks promising to me!

@talldan
Copy link
Contributor Author

talldan commented Aug 6, 2024

One question, it looks like this PR is only updating the specificity for the spacing styles rules. Do they also need to be updated for the base styles, too? I'm imagining not?

I'm not sure, you might have to point me to the base styles.

There have been a couple of reports that I still need to investigate that look similar to this:

@talldan talldan force-pushed the fix/specificity-iframed-editor branch from 32eca75 to 09f1d6e Compare August 6, 2024 09:55
@andrewserong
Copy link
Contributor

I'm not sure, you might have to point me to the base styles.

They're in the same function, from this line onwards:

static::ROOT_BLOCK_SELECTOR === $selector

The logic is fairly similar to the spacing styles, in that the rules are grabbed from the layout definitions here:

function gutenberg_get_layout_definitions() {

Then they're constructed around here:

$layout_selector = sprintf(

And here:

$layout_selector = sprintf(

@talldan
Copy link
Contributor Author

talldan commented Aug 8, 2024

@andrewserong I'm not seeing any issues - I tried lots of different layouts and they look the same between iframed/non-iframed editors, and behave the same when applying global styles and block styles.

It's hard to test exhaustively as those rules do generate a lot of selectors (there really needs to be automated testing in place rather than relying on manual testing).

There is a similar non-iframed bug to this reported in #63925, though it's more related to element/block styles selectors so I think a separate PR would make sense. I'm still not sure what the fix will look like for that one.

@andrewserong
Copy link
Contributor

Thanks for checking @talldan! In that case, it sounds like let's keep the base styles as they are — the fewer things we need to change in one PR, the better, IMO 🙂

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After re-testing this is still testing well for me. Based on the discussions so far, I think it's good that this change is contained to just the spacing part of the layout styles as that reduces the scope for potential breakages given that changes here rely heavily on manual testing 👍

I ran through the same testing steps as last week, all looking good. I thought I found a bug at first when setting paragraph margins at the block level in global styles and how those margins work at the root level in the site editor. It looks like there's an inconsistency in the order of the output between the site editor and site frontend, and it's the same in this PR as on trunk, so not a blocker to landing. Just thought I'd mention it here in case anyone else runs into it while testing.

Note here that the root layout rules override the paragraph margins in the site editor but not the site frontend:

Site editor Site frontend
image image

LGTM, but it'd be good to get a second review since this is aimed at 6.6.2.

@andrewserong andrewserong added the Backport to WP Minor Release Pull request that needs to be backported to a WordPress minor release label Aug 8, 2024
Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I compared output in the un-iframed and framed editors, and the frontend.

✅ Theme.json/global spacing styles are applied as expected with the 'un-iframed' editor

Before After
Screenshot 2024-08-08 at 9 41 23 PM Screenshot 2024-08-08 at 9 41 07 PM

✅ Block styles are overriding theme.json/global styles on the frontend

I tested Group blocks as well in various types (row, grid etc) and can't find any discrepencies.

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for fixing this one @talldan and @andrewserong for the extra checklist of things to test 🙇

I've also given this PR a run according to the test instructions and checklist in #64076 (comment). It's working well for me. Nice work!

Site Editor Frontend
Screenshot 2024-08-09 at 5 23 18 PM Screenshot 2024-08-09 at 5 23 43 PM
Post Editor (non-iframed) Frontend
Screenshot 2024-08-09 at 5 31 01 PM Screenshot 2024-08-09 at 5 25 23 PM

It looks like there's an inconsistency in the order of the output between the site editor and site frontend

I can see the different style order in the provided screenshots but when I was testing locally I couldn't replicate the issue. The ordering remained consistent between both editors and the frontend.

Modifying block margins etc at either the block type level or root styles level didn't seem to make a difference. I could be missing something of course but thought I'd flag that I wasn't seeing the issue.

Edit: Appears I was looking at the .is-layout-constrained style rather than root block gap styles with .wp-site-blocks

@talldan talldan merged commit 476c78b into trunk Aug 13, 2024
70 checks passed
@talldan talldan deleted the fix/specificity-iframed-editor branch August 13, 2024 06:15
@github-actions github-actions bot added this to the Gutenberg 19.1 milestone Aug 13, 2024
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Aug 13, 2024
Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

**The What**

When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin.

With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor.

**The How**

This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0).

The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`.

**References:**
* PHP changes from [WordPress/gutenberg#64076 Gutenberg PR 64076].

Follow-up to [58241], [58228], [55956], [54162].

Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya.
Fixes #61829.

git-svn-id: https://develop.svn.wordpress.org/trunk@58890 602fd350-edb4-49c9-b593-d223f7449a82
@hellofromtonya hellofromtonya removed the Needs PHP backport Needs PHP backport to Core label Aug 13, 2024
@hellofromtonya
Copy link
Contributor

PHP changes were committed into WordPress Core's trunk via https://core.trac.wordpress.org/changeset/58890.

markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Aug 13, 2024
Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

**The What**

When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin.

With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor.

**The How**

This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0).

The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`.

**References:**
* PHP changes from [WordPress/gutenberg#64076 Gutenberg PR 64076].

Follow-up to [58241], [58228], [55956], [54162].

Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya.
Fixes #61829.
Built from https://develop.svn.wordpress.org/trunk@58890


git-svn-id: http://core.svn.wordpress.org/trunk@58286 1a063a9b-81f0-0310-95a4-ce76da25c4cd
github-actions bot pushed a commit to platformsh/wordpress-performance that referenced this pull request Aug 13, 2024
Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

**The What**

When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin.

With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor.

**The How**

This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0).

The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`.

**References:**
* PHP changes from [WordPress/gutenberg#64076 Gutenberg PR 64076].

Follow-up to [58241], [58228], [55956], [54162].

Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya.
Fixes #61829.
Built from https://develop.svn.wordpress.org/trunk@58890


git-svn-id: https://core.svn.wordpress.org/trunk@58286 1a063a9b-81f0-0310-95a4-ce76da25c4cd
getdave pushed a commit that referenced this pull request Aug 14, 2024
* Fix too specific layout styles in non-iframed editor

* Ensure first/last child rules take precedence

* Adjust selectors so that `> :first-child`/`> :last-child` still has 0,2,0 specificity to override theme.json spacing

* Update tests

* Update client side layout selectors to match theme json

* Add backport changelog

----

Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
vcanales pushed a commit that referenced this pull request Sep 4, 2024
* Fix too specific layout styles in non-iframed editor

* Ensure first/last child rules take precedence

* Adjust selectors so that `> :first-child`/`> :last-child` still has 0,2,0 specificity to override theme.json spacing

* Update tests

* Update client side layout selectors to match theme json

* Add backport changelog

----

Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 4, 2024
Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

**The What**

When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin.

With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor.

**The How**

This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0).

The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`.

**References:**
* PHP changes from [WordPress/gutenberg#64076 Gutenberg PR 64076].

Reviewed by andrewserong.
Merges [58890] to the 6.6 branch.

Follow-up to [58241], [58228], [55956], [54162].

Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya, munyagu, apmeyer.
Fixes #61829.

git-svn-id: https://develop.svn.wordpress.org/branches/6.6@58986 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Sep 4, 2024
Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor.

**The What**

When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin.

With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor.

**The How**

This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0).

The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`.

**References:**
* PHP changes from [WordPress/gutenberg#64076 Gutenberg PR 64076].

Reviewed by andrewserong.
Merges [58890] to the 6.6 branch.

Follow-up to [58241], [58228], [55956], [54162].

Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya, munyagu, apmeyer.
Fixes #61829.
Built from https://develop.svn.wordpress.org/branches/6.6@58986


git-svn-id: http://core.svn.wordpress.org/branches/6.6@58382 1a063a9b-81f0-0310-95a4-ce76da25c4cd
talldan added a commit that referenced this pull request Sep 4, 2024
* Fix canvas issues by removing VisualEditor’s height (#63724)

Unlinked contributors: wp-seopress.

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: carolinan <poena@git.wordpress.org>

* Post Editor: Prevent popover from being hidden by metabox (#63939)

* Post Editor: Prevent popover from being hidden by metabox

* Use `.interface-interface-skeleton__content` instead of `.interface-interface-skeleton__body`

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: stokesman <presstoke@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: Rishit30G <rishit30g@git.wordpress.org>
Co-authored-by: dhananjaykuber <dhananjaykuber@git.wordpress.org>

* Global Styles: Fix block custom CSS pseudo element selectors (#63980)

Unlinked contributors: harlet.

Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: dballari <dballari@git.wordpress.org>
Co-authored-by: wongjn <wongjn@git.wordpress.org>

* Avoid errors for post types without a 'menu_icon' (#64015)


Unlinked contributors: karan4official.

Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>

* Data Views: Don't render action modal when there are no eligible items (#64250)


Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>

* Post editor: apply space below content using a pseudo-element instead of padding-bottom (#64639)

Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: stokesman <presstoke@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: carolinan <poena@git.wordpress.org>
Co-authored-by: PC888 <kracked888@git.wordpress.org>

* Featured Image Block: Reduce CSS specificity (#64463)

Co-authored-by: dsas <dsas@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>

* Inserter: use lighter grammar parse to check allowed status (#64902)

Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: jsnajdr <jsnajdr@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>

* Prepare JSON schemas for Draft 7 update (#63582)

Co-authored-by: ajlende <ajlende@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: scruffian <scruffian@git.wordpress.org>

* Fix missing ref support for textAlign and textColumns in theme.json schema (#63625)

* Add missing ref support for textAlign and textColumns

* Update the theme.json reference docs

Co-authored-by: ajlende <ajlende@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: jeryj <jeryj@git.wordpress.org>

* Don't allow duplicating template parts in non-block-based themes (#64379)

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: MadtownLems <madtownlems@git.wordpress.org>

* Fix bumped specificity for layout styles in non-iframed editor (#64076)

* Fix too specific layout styles in non-iframed editor

* Ensure first/last child rules take precedence

* Adjust selectors so that `> :first-child`/`> :last-child` still has 0,2,0 specificity to override theme.json spacing

* Update tests

* Update client side layout selectors to match theme json

* Add backport changelog

----

Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>

* Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in `:where` selectors (#64458)

* Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors

* Add extra test for :where with a pseudo selector

----
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: andreiglingeanu <andreiglingeanu@git.wordpress.org>

* Revert "Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in `:where` selectors (#64458)"

This reverts commit 53a370e.

* Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in `:where` selectors (#64458)

* Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors

* Add extra test for :where with a pseudo selector

----
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: andreiglingeanu <andreiglingeanu@git.wordpress.org>

* Post Editor: fix click space after post content to append (#64992)

* Fix minimally

* Revise comment

* Stop propagation and don’t prevent default

* Insert default block if no blocks are present

* re-build package lock to match format

* Revert "Inserter: use lighter grammar parse to check allowed status (#64902)"

This reverts commit 9b9bbe8.

---------

Co-authored-by: Mitchell Austin <mr.fye@oneandthesame.net>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: carolinan <poena@git.wordpress.org>
Co-authored-by: Aki Hamano <54422211+t-hamano@users.noreply.github.com>
Co-authored-by: stokesman <presstoke@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: Rishit30G <rishit30g@git.wordpress.org>
Co-authored-by: dhananjaykuber <dhananjaykuber@git.wordpress.org>
Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: dballari <dballari@git.wordpress.org>
Co-authored-by: wongjn <wongjn@git.wordpress.org>
Co-authored-by: George Mamadashvili <georgemamadashvili@gmail.com>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>
Co-authored-by: Daniel Richards <daniel.richards@automattic.com>
Co-authored-by: PC888 <kracked888@git.wordpress.org>
Co-authored-by: Dean Sas <dean@deansas.org>
Co-authored-by: dsas <dsas@git.wordpress.org>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: jsnajdr <jsnajdr@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>
Co-authored-by: Alex Lende <alex+github.com@lende.xyz>
Co-authored-by: ajlende <ajlende@git.wordpress.org>
Co-authored-by: scruffian <scruffian@git.wordpress.org>
Co-authored-by: jeryj <jeryj@git.wordpress.org>
Co-authored-by: MadtownLems <madtownlems@git.wordpress.org>
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 4, 2024
Updates the versions from the [WordPress/gutenberg@a74a70e released packages] for the following bugfixes:

* [WordPress/gutenberg#63980 Global Styles: Fix block custom CSS pseudo element selectors]
* [WordPress/gutenberg#64463 Featured Image Block: Reduce CSS specificity]
* [WordPress/gutenberg#64076 Fix bumped specificity for layout styles in non-iframed editor]
* [WordPress/gutenberg#64379 Don't allow duplicating template parts in non-block-based themes]
* [WordPress/gutenberg#64250 Data Views: Don't render action modal when there are no eligible items]
* [WordPress/gutenberg#63724 Fix canvas issues by removing VisualEditor’s height]
* [WordPress/gutenberg#64992 Post Editor: fix click space after post content to append]
* [WordPress/gutenberg#63939 Post Editor: Prevent popover from being hidden by metabox]
* [WordPress/gutenberg#64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom]
* [WordPress/gutenberg#64015 Avoid errors for post types without a 'menu_icon']
* [WordPress/gutenberg#64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors]

Props vcanales.
Fixes #61982.
See #61704, #61769, #61829.

git-svn-id: https://develop.svn.wordpress.org/trunk@58988 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Sep 4, 2024
Updates the versions from the [WordPress/gutenberg@a74a70e released packages] for the following bugfixes:

* [WordPress/gutenberg#63980 Global Styles: Fix block custom CSS pseudo element selectors]
* [WordPress/gutenberg#64463 Featured Image Block: Reduce CSS specificity]
* [WordPress/gutenberg#64076 Fix bumped specificity for layout styles in non-iframed editor]
* [WordPress/gutenberg#64379 Don't allow duplicating template parts in non-block-based themes]
* [WordPress/gutenberg#64250 Data Views: Don't render action modal when there are no eligible items]
* [WordPress/gutenberg#63724 Fix canvas issues by removing VisualEditor’s height]
* [WordPress/gutenberg#64992 Post Editor: fix click space after post content to append]
* [WordPress/gutenberg#63939 Post Editor: Prevent popover from being hidden by metabox]
* [WordPress/gutenberg#64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom]
* [WordPress/gutenberg#64015 Avoid errors for post types without a 'menu_icon']
* [WordPress/gutenberg#64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors]

Props vcanales.
Fixes #61982.
See #61704, #61769, #61829.
Built from https://develop.svn.wordpress.org/trunk@58988


git-svn-id: http://core.svn.wordpress.org/trunk@58384 1a063a9b-81f0-0310-95a4-ce76da25c4cd
github-actions bot pushed a commit to gilzow/wordpress-performance that referenced this pull request Sep 4, 2024
Updates the versions from the [WordPress/gutenberg@a74a70e released packages] for the following bugfixes:

* [WordPress/gutenberg#63980 Global Styles: Fix block custom CSS pseudo element selectors]
* [WordPress/gutenberg#64463 Featured Image Block: Reduce CSS specificity]
* [WordPress/gutenberg#64076 Fix bumped specificity for layout styles in non-iframed editor]
* [WordPress/gutenberg#64379 Don't allow duplicating template parts in non-block-based themes]
* [WordPress/gutenberg#64250 Data Views: Don't render action modal when there are no eligible items]
* [WordPress/gutenberg#63724 Fix canvas issues by removing VisualEditor’s height]
* [WordPress/gutenberg#64992 Post Editor: fix click space after post content to append]
* [WordPress/gutenberg#63939 Post Editor: Prevent popover from being hidden by metabox]
* [WordPress/gutenberg#64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom]
* [WordPress/gutenberg#64015 Avoid errors for post types without a 'menu_icon']
* [WordPress/gutenberg#64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors]

Props vcanales.
Fixes #61982.
See #61704, #61769, #61829.
Built from https://develop.svn.wordpress.org/trunk@58988


git-svn-id: https://core.svn.wordpress.org/trunk@58384 1a063a9b-81f0-0310-95a4-ce76da25c4cd
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 4, 2024
Updates the versions from the [WordPress/gutenberg@a74a70e released packages] for the following bugfixes:

- [WordPress/gutenberg#63980 Global Styles: Fix block custom CSS pseudo element selectors]
- [WordPress/gutenberg#64463 Featured Image Block: Reduce CSS specificity]
- [WordPress/gutenberg#64076 Fix bumped specificity for layout styles in non-iframed editor]
- [WordPress/gutenberg#64379 Don't allow duplicating template parts in non-block-based themes]
- [WordPress/gutenberg#64250 Data Views: Don't render action modal when there are no eligible items]
- [WordPress/gutenberg#63724 Fix canvas issues by removing VisualEditor’s height]
- [WordPress/gutenberg#64992 Post Editor: fix click space after post content to append]
- [WordPress/gutenberg#63939 Post Editor: Prevent popover from being hidden by metabox]
- [WordPress/gutenberg#64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom]
- [WordPress/gutenberg#64015 Avoid errors for post types without a 'menu_icon']
- [WordPress/gutenberg#64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors]

Reviewed by jorbin, hellofromTonya.
Merges [58988] to the 6.6 branch.

Props vcanales.
Fixes #61982.
See #61704, #61769, #61829.


git-svn-id: https://develop.svn.wordpress.org/branches/6.6@58989 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Sep 4, 2024
Updates the versions from the [WordPress/gutenberg@a74a70e released packages] for the following bugfixes:

- [WordPress/gutenberg#63980 Global Styles: Fix block custom CSS pseudo element selectors]
- [WordPress/gutenberg#64463 Featured Image Block: Reduce CSS specificity]
- [WordPress/gutenberg#64076 Fix bumped specificity for layout styles in non-iframed editor]
- [WordPress/gutenberg#64379 Don't allow duplicating template parts in non-block-based themes]
- [WordPress/gutenberg#64250 Data Views: Don't render action modal when there are no eligible items]
- [WordPress/gutenberg#63724 Fix canvas issues by removing VisualEditor’s height]
- [WordPress/gutenberg#64992 Post Editor: fix click space after post content to append]
- [WordPress/gutenberg#63939 Post Editor: Prevent popover from being hidden by metabox]
- [WordPress/gutenberg#64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom]
- [WordPress/gutenberg#64015 Avoid errors for post types without a 'menu_icon']
- [WordPress/gutenberg#64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors]

Reviewed by jorbin, hellofromTonya.
Merges [58988] to the 6.6 branch.

Props vcanales.
Fixes #61982.
See #61704, #61769, #61829.

Built from https://develop.svn.wordpress.org/branches/6.6@58989


git-svn-id: http://core.svn.wordpress.org/branches/6.6@58385 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backport to WP Minor Release Pull request that needs to be backported to a WordPress minor release Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Bug An existing feature does not function as intended
Projects
Status: ✅ Done 6.6.2
Development

Successfully merging this pull request may close these issues.

5 participants